#!/usr/bin/env node

import { Command } from 'commander';
import { crawlNovel } from './crawler.js';
import { saveNovelToFile } from './fileManager.js';
import path from 'path';
import fs from 'fs';

// 创建输出目录
const outputDir = path.join(process.cwd(), 'novels');
if (!fs.existsSync(outputDir)) {
    fs.mkdirSync(outputDir, { recursive: true });
}

// 配置命令行参数
const program = new Command();
program
    .version('1.0.0')
    .description('一个爬取笔趣阁小说并保存为txt的工具')
    .option('-u, --url <url>', '小说目录页URL')
    .option('-o, --output <filename>', '输出文件名 (默认: novel.txt)')
    .option('-c, --chapter <number>', '从第几章开始爬取 (默认: 1)')
    .option('-l, --limit <number>', '最多爬取多少章 (默认: 无限制)')
    .option('-d, --delay <ms>', '每章爬取间隔时间(毫秒) (默认: 1000)')
    .parse(process.argv);

const options = program.opts();

// 检查必要参数
if (!options.url) {
    console.error('错误: 必须提供小说目录页URL');
    program.help();
    process.exit(1);
}

// 设置默认值
const novelUrl = options.url;
const outputFile = options.output || 'novel.txt';
const startChapter = parseInt(options.chapter || '1', 10);
const chapterLimit = options.limit ? parseInt(options.limit, 10) : Infinity;
const delay = parseInt(options.delay || '1000', 10);

// 输出文件完整路径
const outputPath = path.join(outputDir, outputFile);

console.log('开始爬取小说...');
console.log(`目录页URL: ${novelUrl}`);
console.log(`输出文件: ${outputPath}`);
console.log(`起始章节: ${startChapter}`);
console.log(`最大章节数: ${chapterLimit === Infinity ? '无限制' : chapterLimit}`);
console.log(`爬取间隔: ${delay}ms`);
console.log('----------------------------');

// 开始爬取
(async () => {
    try {
        const novel = await crawlNovel(novelUrl, startChapter, chapterLimit, delay);
        await saveNovelToFile(novel, outputPath);
        console.log(`\n爬取完成! 小说已保存到: ${outputPath}`);
    } catch (error) {
        console.error('爬取过程中出错:', error.message);
        process.exit(1);
    }
})();